// PROGRAMA : TABPAP01 OPCAO: 'ATP'
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : GEJUSPC - GERENCIA DA JUSTICA, SEGURANCA PUBLICA E
// CIDADANIA / INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : * DATA: 30/10/2001
// OBJETIVO : ATUALIZAR TABELA DE USER-ID POR POSTO
// ATUALIZACOES DATA
// PROGRAMA : TABPAP01 30/10/2001
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO :
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sistha01;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sistha02;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabtap01;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabtap04;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Tabpap01 OBJETIVO : ATUALIZAR TABELA DE USER-ID POR POSTO *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/tabpap01")
public class Tabpap01 {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Sistha01 sistha01;
	Sistha02 sistha02;
	Tabtap01 tabtap01;
	Tabtap04 tabtap04;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Tabpap01 tabpap01Anterior;
	String faseproc = "0";

	private String descel1 = "";
	private String observ = " ";
	private int datapo = 0;
	private String grupel = "";
	private String s1 = "";
	private int data = 0;
	private int date = 0;
	private String id;

	private Tabtap01 preMapas() {
		sistha01 = new Sistha01(true, sessao);
		sistha02 = new Sistha02(true, sessao);
		tabtap01 = new Tabtap01(true, sessao);
		tabtap04 = new Tabtap04(true, sessao);
		// //dao.rollback();
		tabtap01.setNomeClasse(this.getClass().getSimpleName().toUpperCase());
		tabtap01.setDataCorrente(UtilBean.obtemDataDia());
		tabtap01.setDintabmatfun(sessao.getSisgsisp().getMatric());

		date = UtilBean.obtemDataCorrente();
		data = UtilBean.inverteData(date);
		observ = " ";
		grupel = "";
		datapo = 0;
		tabtap01.setChalfa1("");
		sessao.getSisgsisp().setVar(10);
		tabtap01.setDesp1("POSTO - ");
		tabtap01.setDesp2(tabtap01.getTposto());
		tabtap01.setDesp3(" * ");
		s1 = UtilBean.moveSubstring(s1, 0, 3, "N", 888);
		tabtap01.setSn("N");

		// Par�grafo: r0()
		return tabtap01;
	}

	public Tabpap01(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Sistha01 sistha01, Sistha02 sistha02, Tabtap01 tabtap01, Tabtap04 tabtap04) {
		try {
			main(sistha01, sistha02, tabtap01, tabtap04);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Sistha01 psistha01, Sistha02 psistha02, Tabtap01 ptabtap01, Tabtap04 ptabtap04) {
		if (psistha01 == null && psistha02 == null && ptabtap01 == null && ptabtap04 == null) {
			primeiraVez = true;
			// tabtap01 = new Tabtap01 (primeiraVez);
			tabtap01 = preMapas();
			tabtap01.setNavegar("../tabpap01/executar");
			result.include("tabtap01", tabtap01);
			sessao.setAtributo("TABPAP01", this);
			tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(psistha01, psistha02, ptabtap01, ptabtap04);
		}

		switch (faseproc) {
		case "0":
			tabtap01.receberTela(false, result);
			if (tabtap01.temMensagem) {
				result.include("tabtap01", tabtap01);
				sessao.setAtributo("TABPAP01", this);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			// TELA ATUALIZACAO DE TABELA
			if (!tabtap01.getOperacao().equals("ATP")) {
				saida();
			}
			if (tabtap01.getCodele() == 0) {
				tabtap01.enviarMensagem("codele", "");
				result.include("tabtap01", tabtap01);
				sessao.setAtributo("TABPAP01", this);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			while (vwDvetab.pesquisaTabele(888, tabtap01.getCodele())) {
				tabtap01.setMensagemSaida("REGISTRO EXISTENTE - TECLE PF5 PARA ATUALIZAR");
				descel1 = vwDvetab.getDescricaoElem();
				tabtap01.setDesc1(UtilBean.subStr(descel1, 0, 30));
				String desc2 = UtilBean.subStr(descel1, 30, 30);

				// divide desc2
				tabtap01.setDesp1("POSTO - ");
				desc2 = StringUtils.rightPad(desc2, 30, " ");
				String tporto = StringUtils.mid(desc2, 8, 3);
				String desc2Tela2 = StringUtils.mid(desc2, 14, desc2.length());
				tabtap01.setTposto(Integer.valueOf(StringUtils.isNumeric(tporto) ? tporto : "0"));
				tabtap01.setDesp2(Integer.valueOf(StringUtils.isNumeric(tporto) ? tporto : "0"));
				tabtap01.setDesp3(" * ");
				tabtap01.setDesc2(desc2Tela2);

				// tabtap01.setDesp1(UtilBean.subStr(descel1, 30, 8));
				// tabtap01.setDesp2((int) UtilBean.extraiDigitos(UtilBean.subStr(descel1, 38, 3), 60, 38, 3));
				tabtap01.setTposto(tabtap01.getDesp2());
				// tabtap01.setDesp3(UtilBean.subStr(descel1, 41, 3));
				// tabtap01.setDesc2(UtilBean.subStr(descel1, 44, 16));

				tabtap01.setChalfa1(vwDvetab.getChaveAlfaAcesso());
				observ = vwDvetab.getObservacao();
				grupel = vwDvetab.getGrupoElem();
				datapo = vwDvetab.getDataApoio();
				id = vwDvetab.getId();

				// MOVE (AD=I) TO CTL2

				tabtap01.setDesp1("POSTO - ");
				tabtap01.setDesp3(" * ");
				tabtap01.setSn("S");
				// TELA ATUALIZACAO DE TABELA
				if (UtilBean.getInitUser().equals("S113590") || UtilBean.getInitUser().equals("S1135607") || UtilBean.getInitUser().equals("T0461") || UtilBean.getInitUser().equals("T0462") || UtilBean.getInitUser().equals("S0339838") || UtilBean.getInitUser().equals("T0677") || UtilBean.getInitUser().equals("T0264") || UtilBean.getInitUser().equals("G1962893") || UtilBean.getInitUser().equals("G1034883") || UtilBean.getInitUser().equals("G1828359")) {
					tabtap04.enviarMensagem("", UtilBean.getInitUser());

					faseproc = "1";
					result.include("tabtap04", tabtap04);
					sessao.setAtributo("TABPAP01", this);
					tabtap04.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				} else {
					faseproc = "1";
					result.include("tabtap01", tabtap01);
					sessao.setAtributo("TABPAP01", this);
					tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
			if (vwDvetab.registrosProcessados() == 0) {
				sistha02.setMensagemSaida("REGISTRO INEXISTENTE - TECLE PF5 PARA INCLUIR");

				tabtap01.setSn("S");
				if (UtilBean.getInitUser().equals("S113590") || UtilBean.getInitUser().equals("S1135607") || UtilBean.getInitUser().equals("T0461") || UtilBean.getInitUser().equals("T0462") || UtilBean.getInitUser().equals("S0339838") || UtilBean.getInitUser().equals("G1034883"))
				// TELA ATUALIZACAO DE TABELA
				{

					tabtap04.receberTela(false, result);
				} else {

					tabtap01.receberTela(false, result);
				}
				if (!tabtap04.getOperacao().equals("ATP")) {
					saida();
				}
				/*
				 * if (!UtilBean.funcao.equals(UtilBean.ctt_confirma)) { tabtap01.enviarMensagem(null, "TECLE ENTER PARA ATUALIZAR"); return; }
				 */

				if (psistha02 != null) {
					sistha02.receberTela(false, result);
				} else {
					result.include("sistha02", sistha02);
					sessao.setAtributo("TABPAP01", this);
					sistha02.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
				// TELA CONFIRMA
				if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					tabtap01.setMensagemSaida("REGISTRO NAO ATUALIZADO");
					sessao.setAtributo("TABPAP01", this);
					result.include("tabtap01", tabtap01);
					tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}
				funcoes.tabsatu(sessao);
				if (!funcoes.camret.equals("")) {
					tabtap01.enviarMensagem(funcoes.camret, "");
					// sessao.setAtributo ("TABPAP01", this);
					result.include("tabtap01", tabtap01);
					tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}

				vwTabele.setDataAtualizacao(UtilBean.obtemDataCorrente());
				vwTabele.setMatriculaFunc(sessao.getSisgsisp().getMatric());
				// s1 = UtilBean.moveSubstring(s1, 0, 3, "N", 888);
				vwTabele.setCodigoTabela(888);
				vwTabele.setCodigoElem(tabtap01.getCodele());
				tabtap01.setDesp1("POSTO - ");
				tabtap01.setDesp2(tabtap01.getTposto());
				tabtap01.setDesp3(" * ");

				String desc1 = tabtap01.getDesc1();
				desc1 = StringUtils.rightPad(desc1, 30, " ");// 8
				// desc2

				// divide desc2
				String desp1 = tabtap01.getDesp1();
				desp1 = StringUtils.rightPad(desp1, 8, " ");// 8

				String tposto = tabtap01.getTposto() + "";
				tposto = StringUtils.leftPad(tposto, 3, "0");// 3

				String desp3 = " * ";// 3

				String desc2_tela2 = tabtap01.getDesc2();
				desc2_tela2 = StringUtils.rightPad(desc2_tela2, 16, " ");// 16

				String desc2 = desp1 + tposto + desp3 + desc2_tela2;
				desc2 = StringUtils.rightPad(desc2, 30, " ");

				descel1 = desc1 + desc2;

				vwTabele.setDescricaoElem(descel1);
				vwTabele.setChaveAlfaAcesso(tabtap01.getChalfa1());
				vwTabele.setObservacao(observ);
				vwTabele.setDataApoio(UtilBean.obtemDataCorrente());
				vwTabele.setGrupoElem(grupel);
				vwTabele.grava();
				preMapas();
				faseproc = "0";
				// dao.commit();
				tabtap01.setMensagemSaida(" REGISTRO INCLUIDO OK.");
				sessao.setAtributo("TABPAP01", this);
				result.include("tabtap01", tabtap01);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			break;
		case "1":
			tabtap01.receberTela(false, result);
			if (tabtap01.temMensagem) {
				result.include("tabtap01", tabtap01);
				sessao.setAtributo("TABPAP01", this);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (!tabtap01.getOperacao().equals("ATP")) {
				funcoes.sissm001(result, sessao);
			}
			if (UtilBean.funcao.equals(UtilBean.ctt_confirma)) {
				tabtap01.enviarMensagem(null, "APOS PREENCHIMENTO DOS CAMPOS, TECLE PF5 PARA ATUALIZAR");
				return;
			}

			if (psistha01 != null) {
				sistha01.receberTela(false, result);
			} else {
				result.include("sistha01", sistha01);
				sessao.setAtributo("TABPAP01", this);
				sistha01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			// TELA ALTERACAO OU BAIXA
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				tabtap01.setMensagemSaida("ALTERACAO NAO FOI EXECUTADA");
				sessao.setAtributo("TABPAP01", this);
				result.include("tabtap01", tabtap01);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			funcoes.tabsatu(sessao);
			if (!funcoes.camret.equals("")) {
				tabtap01.enviarMensagem(funcoes.camret, "");
				// sessao.setAtributo ("TABPAP01", this);
				result.include("tabtap01", tabtap01);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			if (!sistha01.getOp2().trim().equals("")) {
				vwDvetab.setDataAtualizacao(UtilBean.obtemDataCorrente());
				vwDvetab.setMatriculaFunc(sessao.getSisgsisp().getMatric());
				vwDvetab.setCodigoTabela(888);
				vwDvetab.setCodigoElem(tabtap01.getCodele());
				tabtap01.setDesp1("POSTO - ");
				tabtap01.setDesp2(tabtap01.getTposto());
				tabtap01.setDesp3(" * ");

				String desc1 = tabtap01.getDesc1();
				desc1 = StringUtils.rightPad(desc1, 30, " ");// 8
				// desc2

				// divide desc2
				String desp1 = tabtap01.getDesp1();
				desp1 = StringUtils.rightPad(desp1, 8, " ");// 8

				String tposto = tabtap01.getTposto() + "";
				tposto = StringUtils.leftPad(tposto, 3, "0");// 3

				String desp3 = " * ";// 3

				String desc2_tela2 = tabtap01.getDesc2();
				desc2_tela2 = StringUtils.rightPad(desc2_tela2, 16, " ");// 16

				String desc2 = desp1 + tposto + desp3 + desc2_tela2;
				desc2 = StringUtils.rightPad(desc2, 30, " ");

				descel1 = desc1 + desc2;

				vwDvetab.setDescricaoElem(descel1);
				vwDvetab.setChaveAlfaAcesso(tabtap01.getChalfa1());
				vwDvetab.setObservacao(observ);
				vwDvetab.setDataApoio(datapo);
				vwDvetab.setGrupoElem(grupel);
				vwDvetab.setId(id);
				vwDvetab.atualiza();
				// dao.commit();
				// dao.rollback();
				preMapas();
				faseproc = "0";
				tabtap01.setMensagemSaida(" REGISTRO ALTERADO OK.");
				sessao.setAtributo("TABPAP01", this);
				result.include("tabtap01", tabtap01);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			if (!sistha01.getOp3().trim().equals("")) {
				vwDvetab.setId(id);
				vwDvetab.exclui();
				// dao.commit();
				preMapas();
				faseproc = "0";
				tabtap01.setMensagemSaida("REGISTRO DELETADO OK.");
				sessao.setAtributo("TABPAP01", this);
				result.include("tabtap01", tabtap01);
				tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			break;
		default:
			break;
		}

		faseproc = "0";
		sessao.setAtributo("TABPAP01", this);
		result.include("tabtap01", tabtap01);
		if (!result.used()) {
			tabtap01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		}
	}

	private void saida() {
		funcoes.sissm001(result, sessao);
	} // SISCERRO}}} //UtilBean.mensagemTexto("!  ERROR NUMERO:" *ERROR-NR
		// "    LINHA:" *ERROR-LINE " PROGRAMA:" tabtap01.getNomeClasse()
		// tabtap04.getNomeClasse() "!");

	private void restaurarEstados(Sistha01 psistha01, Sistha02 psistha02, Tabtap01 ptabtap01, Tabtap04 ptabtap04) {
		this.tabpap01Anterior = (Tabpap01) sessao.getAtributo("TABPAP01");
		if (psistha01 != null) {
			sistha01 = psistha01;
		} else {
			sistha01 = this.tabpap01Anterior.sistha01;
		}
		sistha01.setSessao(sessao);
		if (psistha02 != null) {
			sistha02 = psistha02;
		} else {
			sistha02 = this.tabpap01Anterior.sistha02;
		}
		sistha02.setSessao(sessao);
		if (ptabtap01 != null) {
			tabtap01 = ptabtap01;
		} else {
			tabtap01 = this.tabpap01Anterior.tabtap01;
		}
		tabtap01.setSessao(sessao);
		if (ptabtap04 != null) {
			tabtap04 = ptabtap04;
		} else {
			tabtap04 = this.tabpap01Anterior.tabtap04;
		}
		tabtap04.setSessao(sessao);
		this.faseproc = this.tabpap01Anterior.faseproc;
		observ = this.tabpap01Anterior.observ;
		grupel = this.tabpap01Anterior.grupel;
		datapo = this.tabpap01Anterior.datapo;
		id = this.tabpap01Anterior.id;
	}
}
